package edu.tfh.s2.ehkbot.inventar;

import java.util.HashMap;

/**
 * Warenbestand speichert welche Waren sich im Gescheft befinden.
 * 
 * @author s2zehn
 */
public class Warenbestand {
	/**
	 * Speichert die Menge und die Ware.
	 */
	public class WarenbestandsPosten {
		private int menge;
		private Ware ware;

		public WarenbestandsPosten(Ware ware, int menge) {
			super();
			this.menge = menge;
			this.ware = ware;
		}
	}

	private HashMap<Integer, WarenbestandsPosten> warenbestandsPosten = new HashMap<Integer, WarenbestandsPosten>();

	/**
	 * Fügt ein Posten hinzu.
	 * 
	 * @param ware
	 *            Die Ware.
	 * @param menge
	 *            Die Menge.
	 */
	public void add(Ware ware, int menge) {
		warenbestandsPosten.put(new Integer(ware.getBarcode()), new WarenbestandsPosten(ware, menge));
	}

	/**
	 * Sucht nach der Ware in Bestand.
	 * 
	 * @param barcode
	 *            Der Barcode der Ware.
	 * @return Die Ware oder null fals nicht gefunden.
	 */
	public Ware findeWare(int barcode) {
		WarenbestandsPosten posten = findeWarenbestandsPosten(barcode);
		if (posten != null) {
			return posten.ware;
		}
		return null;
	}

	/**
	 * Hilfsfunktion zum Suchen in den Warenbestand.
	 * 
	 * @param barcode
	 *            Der Barcode der Ware.
	 * @return Die Ware oder null fals nicht gefunden.
	 */
	private WarenbestandsPosten findeWarenbestandsPosten(int barcode) {
		if (warenbestandsPosten.containsKey(new Integer(barcode)))
			return warenbestandsPosten.get(new Integer(barcode));
		else
			return null;
	}

	/**
	 * Liefert die Menge der Ware in den Bestand.
	 * 
	 * @param ware
	 *            Die Ware
	 * @return Die Menge.
	 */
	public int menge(Ware ware) {
		WarenbestandsPosten posten = findeWarenbestandsPosten(ware.getBarcode());
		if (posten != null) {
			return posten.menge;
		}
		return 0;
	}

	/**
	 * Setzt die Menge von einer Ware.
	 * 
	 * @param ware
	 *            Die Ware
	 * @param menge
	 *            Die Menge.
	 */
	public void setMenge(Ware ware, int menge) {
		WarenbestandsPosten posten = findeWarenbestandsPosten(ware.getBarcode());
		if (posten != null) {
			posten.menge = menge;
			;
		}
	}
}
